package com.ruoyi.web.controller.business;

import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.pojo.SheetData;
import com.ruoyi.common.utils.file.ExcelExporter;
import com.ruoyi.system.domain.CaiGouDan;
import com.ruoyi.system.domain.HuoPinPinLei;
import com.ruoyi.system.domain.vo.AddCaiGouDanReq;
import com.ruoyi.system.domain.vo.CaiGouDanQueryReq;
import com.ruoyi.system.domain.vo.CaiGouDanShenHeDetail;
import com.ruoyi.system.service.ICaiGouDanService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 采购单信息 前端控制器
 * </p>
 *
 * @author qubaofeng
 * @since 2025-02-18
 */
@RestController
@RequestMapping("/system/caiGouDan")
public class CaiGouDanController extends BaseController {

    @Resource
    private ICaiGouDanService service;

    /**
     * 获取列表
     */
    @GetMapping("/list")
    public TableDataInfo list(CaiGouDanQueryReq req)
    {

        startPage();
        List<CaiGouDan> list = service.selectCaiGouDanList(req);
        return getDataTable(list);
    }

    /**
     * 获取品类列表
     */
    @GetMapping("/getPinLeiList")
    public AjaxResult getPinLeiList(@RequestParam(value = "date") String date )
    {
        List<HuoPinPinLei> list = service.selectPinLeiList(date);
        return AjaxResult.success(list);
    }

    /**
     * 获取品类列表
     */
    @PostMapping("/addCaiGouDan")
    public AjaxResult addCaiGouDan(@RequestBody AddCaiGouDanReq req)
    {
        boolean ok = service.addCaiGouDan(req, getUsername());
        if(ok){
            return AjaxResult.success();
        } else {
            return AjaxResult.error();
        }
    }

    /**
     * 获取品类列表
     */
    @GetMapping("/getCaiGouDanDetail")
    public AjaxResult getCaiGouDanDetail(@RequestParam(value = "id") Long id)
    {
        List<CaiGouDanShenHeDetail> dingDanList =  service.selectCaigoudanDetail(id);
        return AjaxResult.success(dingDanList);
    }



    /**
     * 导出列表，不分页
     */
    @PostMapping("/export")
    public void export(CaiGouDanQueryReq req, HttpServletResponse rsp) throws IOException {

        List<String> titles = new ArrayList<>();
        titles.add("档口");
        titles.add("订单号");
        titles.add("订单详情号");
        titles.add("供货日期");
        titles.add("货品类型");
        titles.add("货品编号");
        titles.add("货品");
        titles.add("供应数量");
        titles.add("单位");
        titles.add("单价");
        titles.add("品牌");
        titles.add("总计");
        titles.add("实际供应量");
        titles.add("实际单价");
        titles.add("生产日期");
        titles.add("保质期");
        titles.add("生产厂家");

        List<CaiGouDan> list = service.selectCaiGouDanListNoPage(req);
        List<SheetData> sheetDataList = new ArrayList<>();
        Map<String, List<List<String>>> map = new HashMap<>(32);
        for(CaiGouDan caiGouDan : list){
            String gysName = caiGouDan.getGongYingShangName();
            List<List<String>> gyscgdList = map.computeIfAbsent(gysName, k -> {
                List<List<String>> data = new ArrayList<>();
                data.add(titles);
                return data;
            });

            List<String> data = new ArrayList<>();
            BigDecimal amount = caiGouDan.getHuoPinPrice().multiply(caiGouDan.getBuyCount());

            data.add(caiGouDan.getDangKouName()+"");
            data.add(caiGouDan.getDingDanId()+"");
            data.add(caiGouDan.getDingDanDetailId()+"");
            data.add(caiGouDan.getRiQi().toString());
            data.add(caiGouDan.getHuoPinPinLeiName());
            data.add(caiGouDan.getHuoPinId()+"");
            data.add(caiGouDan.getHuoPinName());
            data.add(caiGouDan.getBuyCount().toPlainString());
            data.add(caiGouDan.getDanWei());
            data.add(caiGouDan.getHuoPinPrice().toPlainString());
            data.add(caiGouDan.getPinPai());
            data.add(amount.toPlainString());
            data.add("");
            data.add("");
            data.add("");
            data.add("");
            data.add("");

            gyscgdList.add(data);
        }

        for(String key : map.keySet()){
            SheetData sheetData = new SheetData();
            sheetData.setName(key);
            sheetData.setData(map.get(key));
            sheetDataList.add(sheetData);
        }

        ExcelExporter.exportToMultiSheetExcel(sheetDataList, rsp.getOutputStream());
    }

    /**
     * 审核
     */
    @GetMapping("/audit")
    public AjaxResult audit(@RequestParam(value = "id") Long id,
                            @RequestParam(value = "status") Integer status)
    {
        boolean ok = service.audit(id, status);
        if(ok) {
            return AjaxResult.success();
        } else {
            return AjaxResult.error();
        }
    }

    /**
     * <p>
     * 货品价格变化历史 前端控制器
     * </p>
     *
     * @author qubaofeng
     * @since 2025-02-24
     */
    @Controller
    @RequestMapping("/huoPinPriceHis")
    public static class HuoPinPriceHisController {

    }
}
